Newsgroups: comp.lang.perl,news.answers Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!usc!wupost!uunet!boulder!wraeththu.cs.colorado.edu!tchrist From: tchrist@wraeththu.cs.colorado.edu (Tom Christiansen) Subject: comp.lang.perl FAQ (part 1 of 2) Message-ID: <1993Aug1.180646.369@colorado.edu> Followup-To: comp.lang.perl Summary: It's been a while Sender: news@colorado.edu (The Daily Planet) Nntp-Posting-Host: wraeththu.cs.colorado.edu Organization: University of Colorado, Boulder Date: Sun, 1 Aug 1993 18:06:46 GMT Approved: news-answers-request@MIT.Edu Expires: Mon, 15 Sep 1993 12:00:00 GMT Lines: 926 Xref: senator-bedfellow.mit.edu comp.lang.perl:18925 news.answers:10934 Archive-name: perl-faq/part1 Version: $Id: perl-info,v 1.3 93/08/01 11:49:01 tchrist Exp Locker: tchrist $ This posting contains answers to general information questions, mostly of a non-technical nature. The following questions are answered: 1.1) What is Perl? 1.2) Is Perl hard to learn? 1.3) Should I program everything in Perl? 1.4) Where can I get Perl over the Internet? 1.5) Where can I get Perl via Email? 1.6) How can I get Perl via UUCP? 1.7) Where can I get more information on Perl? 1.8) Can people who aren't on USENET receive comp.lang.perl as a digest? 1.9) Are archives of comp.lang.perl available? 1.10) Is there a WAIS server for Perl? 1.11) Is there a Perl port to machine FOO? 1.12) How do I get Perl to compile on Solaris? 1.13) How do I get Perl to compile on a Next? 1.14) Where can I get (info|inter|ora|sql|syb)perl? 1.15) Where can I get an SNMP-aware Perl? 1.16) There's an a2p and an s2p; why isn't there a p2c (perl-to-C)? 1.17) Where can I get undump for my machine? 1.18) Where can I get a perl-mode for emacs? 1.19) How can I use Perl interactively? 1.20) Is there a Perl shell? 1.21) Is there a Perl profiler? 1.22) Is there a yacc for Perl? 1.23) How can I use curses with perl? 1.24) How can I use X with Perl? 1.25) What is perl4? What is perl5? 1.26) How does Perl compare with languages like REXX or TCL? 1.27) Is it a Perl program or a Perl script? 1.28) What's the difference between "Perl" and "perl"? 1.29) What companies use or ship Perl? 1.30) Is there commercial, 3rd-party support for Perl? 1.31) Where can I get a list of the JAPH signature quotes? 1.32) Where can I get a list of Larry Wall witticisms? 1.33) Is there a pretty-printer for Perl? 1.1) What is Perl? A programming language, by Larry Wall . Here's the beginning of the description from the man page: Perl is an interpreted language optimized for scanning arbitrary text files, extracting information from those text files, and printing reports based on that information. It's also a good language for many system management tasks. The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal). It combines (in the author's opinion, anyway) some of the best features of C, sed, awk, and sh, so people familiar with those languages should have little difficulty with it. (Language historians will also note some vestiges of csh, Pascal, and even BASIC-PLUS.) Expression syntax corresponds quite closely to C expression syntax. Unlike most Unix utilities, Perl does not arbitrarily limit the size of your data--if you've got the memory, Perl can slurp in your whole file as a single string. Recursion is of unlimited depth. And the hash tables used by associative arrays grow as necessary to prevent degraded performance. Perl uses sophisticated pattern matching techniques to scan large amounts of data very quickly. Although optimized for scanning text, Perl can also deal with binary data, and can make dbm files look like associative arrays (where dbm is available). Setuid Perl scripts are safer than C programs through a dataflow tracing mechanism which prevents many stupid security holes. If you have a problem that would ordinarily use sed or awk or sh, but it exceeds their capabilities or must run a little faster, and you don't want to write the silly thing in C, then Perl may be for you. There are also translators to turn your sed and awk scripts into Perl scripts. 1.2) Is Perl hard to learn? No, Perl is easy to learn for two reasons. The first reason is that most of Perl is derived from existing tools and languages, ones that many people who turn to Perl already have some familiarity with. These include the C programming language, the UNIX C library, the UNIX shell, sed, and awk. If you already know these somewhat, Perl should be very easy for you. The second reason that Perl is easy to learn is that you don't have to know every thing there is to know about it in order to get good use out of it. In fact, just a very small subset, mostly borrowed from C, the shell, and sed, will be enough for most tasks. As you feel the need or desire to use more sophisticated features (such as C structures or networking), you can learn these as you go. The learning curve for Perl is not a steep one, especially if you have the headstart of having a background in UNIX. Rather, its learning curve is gentle and gradual, but it *is* admittedly rather long. If you don't know C or UNIX at all, it'll be a steeper learning curve, but what you then learn from Perl will carry over into other areas, like using the C library, UNIX system call, regular expressions, and associative arrays, just to name a few. To know Perl is to know UNIX, and vice versa. 1.3) Should I program everything in Perl? Of course not. You should choose the appropriate tool for the task at hand. While it's true that the answer to the question "Can I do (some arbitrary task) in Perl?" is almost always "yes", that doesn't mean this is necessarily a good thing to do. For many people, Perl serves as a great replacement for shell programming. For a few people, it also serves as a replacement for most of what they'd do in C. But for some things, Perl just isn't the optimal choice, such as tasks requiring very complex data structures. 1.4) Where can I get Perl over the Internet? From any comp.sources.misc archive. Initial sources were posted to Volume 18, Issues 19-54 at patchlevel 3. The Patches 4-10 were posted to Volume 20, Issues 56-62. You can use the archie server (see the alt.sources FAQ in news.answers) for ways to find these. These machines, at the very least, definitely have it available for anonymous FTP: ftp.uu.net 137.39.1.2 ftp.netlabs.com 192.94.48.152 coombs.anu.edu.au 150.203.76.2 archive.cis.ohio-state.edu 128.146.8.52 jpl-devvax.jpl.nasa.gov 128.149.1.143 prep.ai.mit.edu 18.71.0.38 ftp.cs.ruu.nl 131.211.80.17 (Europe) Larry's machine is the netlabs one, and the biggest Perl archive is on coombs. 1.5) Where can I get Perl via Email? If you are in Europe, you might using the following site. (I'm still looking for a domestic site.) This information thanks to "Henk P. Penning" : One automated fashion is as follows: Email: Send a message to 'mail-server@cs.ruu.nl' containing: begin path your_email_address send help send PERL/INDEX end The path-line may be omitted if your message contains a normal From:-line. You will receive a help-file and an index of the directory that contains the Perl stuff. If all else fails, mail to Larry usually suffices. 1.6) How can I get Perl via UUCP? You can get it from the site osu-cis; here is the appropriate info, thanks to J Greely or . E-mail contact: osu-cis!uucp Get these two files first: osu-cis!~/GNU.how-to-get. osu-cis!~/ls-lR.Z Current Perl distribution: osu-cis!~/perl/4.0/kits@10/perl.kitXX.Z (XX=01-37) How to reach osu-cis via uucp(L.sys/Systems file lines): # # Direct Trailblazer # osu-cis Any ACU 19200 1-614-292-5112 in:--in:--in: Uanon # # Direct V.32 (MNP 4) # dead, dead, dead...sigh. # #osu-cis Any ACU 9600 1-614-292-1153 in:--in:--in: Uanon # # Micom port selector, at 1200, 2400, or 9600 bps. # Replace ##'s below with 12, 24, or 96 (both speed and phone number). # osu-cis Any ACU ##00 1-614-292-31## "" \r\c Name? osu-cis nected \c GO \d\r\d\r\d\r in:--in:--in: Uanon Modify as appropriate for your site, of course, to deal with your local telephone system. There are no limitations concerning the hours of the day you may call. Another possibility is to use UUNET, although they charge you for it. You have been duly warned. Here's the advert: Anonymous Access to UUNET's Source Archives 1-900-GOT-SRCS UUNET now provides access to its extensive collection of UNIX related sources to non- subscribers. By calling 1-900-468-7727 and using the login "uucp" with no password, anyone may uucp any of UUNET's on line source collection. Callers will be charged 40 cents per minute. The charges will appear on their next tele- phone bill. The file uunet!/info/help contains instructions. The file uunet!/index//ls-lR.Z contains a complete list of the files available and is updated daily. Files ending in Z need to be uncompressed before being used. The file uunet!~/compress.tar is a tar archive containing the C sources for the uncompress program. This service provides a cost effective way of obtaining current releases of sources without having to maintain accounts with UUNET or some other service. All modems connected to the 900 number are Telebit T2500 modems. These modems support all standard modem speeds including PEP, V.32 (9600), V.22bis (2400), Bell 212a (1200), and Bell 103 (300). Using PEP or V.32, a 1.5 megabyte file such as the GNU C compiler would cost $10 in con- nect charges. The entire 55 megabyte X Window system V11 R4 would cost only $370 in connect time. These costs are less than the official tape distribution fees and they are available now via modem. UUNET Communications Services 3110 Fairview Park Drive, Suite 570 Falls Church, VA 22042 +1 703 876 5050 (voice) +1 703 876 5059 (fax) info@uunet.uu.net 1.7) Where can I get more information on Perl? We'll cover five areas here: USENET (where you're probably reading this), publications, the reference guide, examples on the Internet, and Perl instructional courses. A. USENET You should definitely read the USENET comp.lang.perl newsgroup or mailing list for all sorts of discussions regarding the language, bugs, features, history, humor, and trivia. In this respect, it functions both as a comp.lang.* style newsgroup and also as a user group for the language; in fact, there's a mailing list called ``perl-users'' that is bidirectionally gatewayed to the newsgroup; see question #38 for details. Larry Wall is a very frequent poster here, as well as many (if not most) of the other seasoned Perl programmers. It's the best place for the very latest information on Perl. B. PUBLICATIONS If you've been dismayed by the ~80-page troffed Perl man page (or is that man treatise?) you should look to ``the Camel Book'', written by Larry and Randal L. Schwartz , published as a Nutshell Handbook by O'Reilly & Associates and entitled _Programming Perl_. Besides serving as a reference guide for Perl, it also contains tutorial material and is a great source of examples and cookbook procedures, as well as wit and wisdom, tricks and traps, pranks and pitfalls. The code examples contained therein are available via anonymous FTP from ftp.uu.net in /published/oreilly/nutshell/perl/perl.tar.Z for your retrieval. Corrections and additions to the book can be found in the Perl man page right before the BUGS section under the heading ERRATA AND ADDENDA. If you can't find the book in your local technical bookstore, the book may be ordered directly from O'Reilly by calling 1-800-998-9938 if in North America and 1-707-829-0515. The book's ISBN is 0-937175-64-1. Autographed copies are *NO LONGER* available from TECHbooks -- you'll have to nab the authors in person if you want one. Larry routinely carries around a camel stamp for just such an occasion. Reasonably substantiated rumor has it that there will be another Perl book out pretty soon, this one aimed more at beginners. Look for it from ORA towards the beginning of 93. Larry Wall has published a 3-part article on perl in Unix World (August through October of 1991), and Rob Kolstad also had a 3-parter in Unix Review (May through July of 1990). Tom Christiansen also has a brief overview article in the trade newsletter Unix Technology Advisor from November of 1989. You might also investigate "The Wisdom of Perl" by Gordon Galligher from SunExpert magazine; April 1991 Volume 2 Number 4. The Dec 92 Computer Language magazine also contains a cover article on Perl, "Perl: the Programmers Toolbox". The USENIX LISA (Large Installations Systems Administration) Conference have for several years now included many papers of tools written in Perl. Old proceedings of these conferences are available; look in your current issue of ";login:" or send mail to office@usenix.org for further information. C. INTERNET For other examples of Perl scripts, look in the Perl source directory in the eg subdirectory. The site with the biggest repository of Perl scripts right now seems to be coombs.anu.edu.au [150.203.76.2]. That directory has an INDEX with over 300 lines in it, each describing what the script does. This is maintained by mark@coombs.anu.edu.au . Note: European users please use the mirror site on src.doc.ic.ac.uk[149.169.2.1 in /programming-languages/perl/coombs-scripts. The link speed would be a lot better for all. Contact L.McLoughlin@doc.ic.ac.uk for more information. It is updated daily. Another source for examples, currently only for anonymous FTP, is on convex.com [130.168.1.1]. This contains, amongst other things, a copy of the newsgroup up through Aug 91, a text retrieval database for the newsgroup, a rather old and short troff version of Tom Christiansen's perl tutorial (this was the version presented at Washington DC USENIX), and quite a few of Tom's scripts. You can look at the INDEX file in /pub/perl/INDEX for a list of what's in that directory. The Convex and Ohio State archives are mirrored on uunet in /languages/perl/scripts-{convex,osu}. There's also a #Perl channel on IRC (Internet Relay Chat) where Tom and Randal have been known to hang out. That's real-time, free Perl support. What more can you ask? :-) D. REFERENCE GUIDE A nice reference guide by Johan Vromans is also available; It is distributed in LaTeX (source) and PostScript (ready to print) forms. Obsolete versions may still be available in TeX and troff forms, although these don't print as nicely. The official kit includes both LaTeX and PostScript forms, and can be FTP'd from ftp.cs.ruu.nl [131.211.80.17], file /pub/DOC/perlref-4.035.tar.Z. The reference guide comes with the O'Reilly book in a nice, glossy card format. E. PERL COURSES Various technical conferences, including USENIX, LISA, SUG, WCSAS, AUUG, FedUnix, and Europen have been sponsoring tutorials of varying lengths on Perl at their system administration and general conferences. You might consider attending one of these. These classes are typically taught by Tom Christiansen . Both Tom and Randal Schwartz also teach Perl on occasion. Special appearances by Tom and/or Randal may also be negotiated. Classes can run from one day up to a week ranging over a wide range of subject matter (most are two or three days), and can include lab time if you want; having lab time with exercises is generally of great benefit. Send us mail if your organization is interested in having a Perl class taught at your site, or if you'd like to know when the next public appearances are. 1.8) Can people who aren't on USENET receive comp.lang.perl as a digest? "Perl-Users" is the mailing list version of the comp.lang.perl newsgroup. If you're not lucky enough to be on USENET you can post to comp.lang.perl by sending to one of the following addresses. Which one will work best for you depends on which nets your site is hooked into. Ask your local network guru if you're not certain. Internet: PERL-USERS@VIRGINIA.EDU Perl-Users@UVAARPA.VIRGINIA.EDU BitNet: Perl@Virginia uucp: ...!uunet!virginia!perl-users The Perl-Users list is bidirectionally gatewayed with the USENET newsgroup comp.lang.perl. This means that VIRGINIA functions as a reflector. All traffic coming in from the non-USENET side is immediately posted to the newsgroup. Postings from the USENET side are periodically digested and mailed out to the Perl-Users mailing list. A digest is created and distributed at least once per day, more often if traffic warrants. All requests to be added to or deleted from this list, problems, questions, etc., should be sent to: Internet: Perl-Users-Request@Virginia.EDU Perl-Users-Request@uvaarpa.Virginia.EDU BitNet: Perl-Req@Virginia uucp: ...!uunet!virginia!perl-users-request Coordinator: Marc Rouleau 1.9) Are archives of comp.lang.perl available? Yes, although they're poorly organized. You can get them from the host ftp.ugcs.caltech.edu (131.215.128.204) to the file /pub/comp.lang.perl.tar.Z; this file was last modified on February 15, 1992, and is 8.9 megabytes long. Obviously, it's considerably out of date. These are currently stored in news- or MH-style format; there are subdirectories named things like "arrays", "programs", "taint", and "emacs". Unfortunately, only the first ~1600 or so messages have been so categorized, and we're now up to almost 15000. Furthermore, even this categorization was haphazardly done and contains errors. Both Larry and I have maintained archives of the nearly 19,000 messages the newsgroup has seen since its inception. I'm currently looking for a home for them. It'll take about 100 megabytes, although I'm on a 16k/2k filesystem, and that might be reduced somewhat by one with smaller frags. Or perhaps I'll just get myself a new disk. They're just stored as regular files the way news does, so it's somewhat unmanageable. A more sophisticated query and retrieval mechanism is desirable. Preferably one that allows you to retrieve article using a fast-access indices, keyed on at least author, date, subject, thread (as in "trn") and probably keywords. Right now, the MH pick command works for this, but it is very slow to select on 18000 articles. If you're serious about this, your best bet is probably to retrieve the compressed tarchive and play with what you get. Any suggestions how to better sort this all out are extremely welcome. If you have a special request for a query on the old newsgroup postings, and make nice noises in my direction, I can run the query and send them to you. Algebraic queries are like "find me anything about this and that and the other thing but not this or whozits". I hope to put this in the form of a mailserver. Donated software would be fine. :-) The fast text-retrieval query system for this I'm currently using is Liam Quin's excellent lqtext system, available from ftp.cs.toronto.edu in /pub/lq-text* . 1.10) Is there a WAIS server for Perl? Rumor has it that there are WAIS servers out there for comp.lang.perl these days, but I haven't used them. Kevin Gardner offers the following: For WAIS server info, check on the gopher hole at mudhoney.micro.umn.edu, port 70. They've got a rather extensive list of WAIS servers at this gopher->WAIS gateway, including a c.l.p. archive server. I don't know how up to date the server actually is, as the articles I pulled up from there were all dated from '91. Bill Middleton offers this: "I have setup a perl script retrieval service and WaisSearch here at feenix. To check it out, just point your gopher at us, and select the appropriate menu option. The WaisSearch is of the iubio type, which means you can do boolean searching. Thus you might try something like: caller ioctl and fcntl grep and socket not curses and other things to see examples of how other folks have done this or that. This service is still under construction, but I'd like to get feedback, if you have some time. There's also a WaisSearch into all the RFC's and some other fairly nifty stuff." 1.11) Is there a Perl port to machine FOO? Probably. Perl already runs on virtually all UNIX machines as well as quite a few non-UNIX ones. Chances are that if you're running a UNIX box, you simply need to run Configure and everything will be taken care of for you. For most UNIX machines, no porting is required. Perl comes with an elaborate auto-configuration script that allows Perl to be painlessly ported to a wide variety of platforms, including many non-UNIX ones. Amiga and MS-DOS binaries are available on jpl-devvax.jpl.nasa.gov [128.149.1.143] for anonymous FTP. Try to bring Perl up on your machine, and if you have problems, examine the README file carefully, and if all else fails, post to comp.lang.perl with a cross-posting to comp.sys.whatever; probably someone out there has run into your problem and will be able to help you. In the perl archive on coombs.anu.edu.au, you can consult the file /pub/perl/misc/perl.code.sources for information not contained below. It may also be more up-to-date as well. In particular, since they're so often asked about, here's some information for the MacIntosh from Matthias Ulrich Neeracher : A port of Perl to the Apple Macintosh is available by anonymous ftp to wuarchive.wustl.edu [128.252.135.4] from the file /mirrors2/rascal.ics.utexas.edu/programming/Perl_402_MPW_CPT_bin . You can also get it from Host gatekeeper.dec.com [16.1.0.2] in /.9/plan/perl/macperl/Perl_402_MPW_CPT_bin . The file is 1.1M and must be transferred in BINARY mode. Please be considerate of the archive sites' users during CDT working hours. (And, no, there is no way to get it by email). For European users, the file should soon appear on lth.se. To make optimal use of all the features of this port, you should have MPW, ToolServer, and 5M of memory. There is also a standalone version included, but it's currently of very limited usefulness. This package contains all of the sources for compilation with MPW C 3.2 Here's more, from Timothy Murphy I ported perl to the Mac, using Think C, a while ago. I've used it quite a lot since without problems. It is available from ftp.maths.tcd.ie in pub/Mac/perl.hqx . The source (as diffs from the standard source) is in the subdirectory pub/Mac/perl-4.035 . A Mac version of patch is also available in pub/Mac/patch.hqx with source in pub/Mac/patch-2.0 . Various other Mac ports of GNU programs can be found in the same place. They all use a small "ThinkCPosix" library containing various Unix-like functions, which again can be found in the same place. And here's some VMS information from Rao V. Akella : (this appears to be an old port) You can pick up Perl for VMS (version 3.0.1.1 patchlevel 4) via anonymous ftp from ftp.pitt.edu [130.49.253.1] in the software/vms/perl subdirectory (there are two files there: perl-pl18.bck and perl-pl4.bck). There is also a v3.018 on info.rz.uni-ulm.de [134.60.1.125] or vms.huji.ac.il [128.139.4.3] in /pub/VMS/misc (information courtesy of Anders Rolff ). And here is a recent version for MS-DOS from Budi Rahard , who says: I am collecting MS-DOS Perl(s) in ftp.ee.umanitoba.ca directory /pub/msdos/perl. Currently I received three versions of Perl v4.019 and one of 4.010. (Tommy Thorn and Len Reed ) There is now a 4.035 for 386 [DOS], Hitoshi Doi port, is available ftp.ee.umanitoba.ca as /pub/msdos/perl/perl386.zoo . Please contact the porters directly in case of questions about these ports. A new version of "bigperl4" has been uploaded to Simtel20 and mirror sites: pd1: BPERL2X.ZIP 32-bit Perl 4.0pl36 w/VM & Win 3.1 supt. (exe) BPERL2S1.ZIP 32-bit Perl 4.0pl36 w/VM & Win supt. (src 1/2) BPERL2S2.ZIP 32-bit Perl 4.0pl36 w/VM & Win supt. (src 2/2) For those of you who don't know what "bigperl4" is, here's the short description: BIGPERL4 is Perl 4.0pl36 that has been compiled using the Watcom C/386 compiler (a 32-bit, flat-memory model C compiler), which gives this version the following features: * Up to 32MB of memory can be used. * Supports virtual memory. * Works under Windows 3.1 (however, a second copy of perl cannot be spawned under Windows). * The perl debugger can be used. * Contains GDBM support. A 386/486 with at least 4MB RAM is required, and a third-party memory manager such as QEMM is strongly recommended. BIGPERL4 also passes those perl tests that do not depend on Unix-isms. Full sources are included (including GDBM 1.5). Freeware and copylefted (in the case of GDBM 1.5). 1.12) How do I get Perl to compile on Solaris? John Lees reports: I have built perl on Solaris 2.1, 2.2 beta, and 2.2 FCS. Take /usr/ucb out of your path and do not use any BSD/UCB libraries. Only -lsocket, -lnsl, and -lm are needed. You can use the hint for Solaris 2.0, but the one for 2.1 is wrong. Do not use vfork. Do not use -I/usr/ucbinclude. The result works fine for me, but of couse does not support a couple of BSDism's. Casper H.S. Dik reports You must remove all the references to /usr/ucblib AND /usr/ucbinclude. And ignore the Solaris_2.1 hints. They are wrong. The undefining of vfork() probably ahs to do with the confusion it gives to the compilers. If you use cc, you mustn't compile util.c/tutil.c with -O. I only used the following libs: -lsocket -lnsl -lm (there is a problem with -lmalloc) 1.13) How do I get Perl to compile on a Next? Bill Eldridge reports: To get perl to compile on Nexts, you need to combine the ansi and bsd headers: cd /usr/include mkdir ansibsd cd ansibsd ln -s ../ansi ln -s ../bsd Then follow the configuration instructions for Nexts, *replacing* all mention of -I/usr/include/ansi or -I/usr/include/bsd with -I/usr/include/ansibsd. (There might be more elegant solutions, but this is how I did it, and it's quick and so far painless). 1.14) Where can I get (info|inter|ora|sql|syb)perl? Numerous database-oriented extensions to Perl have been written. These amount to using the usub mechanism (see the usub/ subdirectory in the distribution tree) to link in a database library, allowing embedded calls to Informix, Interbase, Oracle, Ingres, and Sybase. There is currently a project underway, organized by Buzz Moschetti , to create a higher level interface (DBperl) that will allow you to write your queries in a database-independent fashion. If you're interested, send mail to and ask to be placed on the perldb-interest@vix.com mailing list. Meanwhile, here are the authors of the various extensions: What Target DB Who -------- ----------- ---------------------------------------- Infoperl Informix Kurt Andersen (kurt@hpsdid.sdd.hp.com) Interperl Interbase Buzz Moschetti (buzz@bear.com) Oraperl Oracle Kevin Stock (kstock@encore.com) Sqlperl Ingres Ted Lemon (mellon@ncd.com) Sybperl Sybase Michael Peppler (mpeppler@itf.ch) Here's a bit of advertising from Buzz: Perl is an interpreted language with powerful string, scalar, and array processing features developed by Larry Wall that "nicely bridges the functionality gap between sh(1) and C." Since relational DB operations are typically textually oriented, perl is particularly well-suited to manage the data flows. The C source code, which is available free of charge and runs on many platforms, contains a user-defined function entry point that permits a developer to extend the basic function set of the language. The DBperl Group seeks to exploit this capability by creating a standardized set of perl function extensions (e.g. db_fetch(), db_attach()) based the SQL model for manipulating a relational DB, thus providing a portable perl interface to a variety of popular RDMS engines including Sybase, Oracle, Ingres, Informix, and Interbase. In theory, any DB engine that implements a dynamic SQL interpreter in its HLI can be bolted onto the perl front end with predicatable results, although at this time backends exist only for the aforementioned five DB engines. 1.15) Where can I get an SNMP-aware Perl? snmperl was written by Guy Streeter (streeter@ingr.com), and was posted in late February 1993 to comp.protocols.snmp. The author has not made it available for anonymous ftp, archie only reported one site: Host liasun3.epfl.ch Location: /pub/net/snmp FILE -rw-rw-r-- 3407 Aug 11 1992 snmperl.README FILE -rw-r--r-- 17678 Aug 11 1992 snmperl.tar.Z Here is the gist of the README: README $Revision: 1.3 $ This directory contains the source code to add callable C subroutines to perl. The subroutines implement the SNMP functions "get", "getnext", and "set". They use the freely-distributable SNMP package (version 1.1b) from CMU. USE: There are four subroutines defined in the callable interface: snmp_get, snmp_next, snmp_set, and snmp_error. snmp_get and snmp_next implement the GET and GETNEXT operations, respectively. The first two calling arguments are the hostname and Community string. The IP address of the host, as a dotted-quad ASCII string, may be used as the hostname. The rest of the calling arguments are a list of variables. See the CMU package documentation for how variables may be specified. snmp_set also takes hostname and Community string as arguments. The remaining arguments are a list of triples consisting of variable name, variable type, and value. The variable type is a string, such as "INTEGER" or "IpAddress". snmp_get, snmp_next, and snmp_set return a list containing alternating variables and values. snmp_get and snmp_next will simply omit non-existent variables on return. snmp_set will fail completely if one of the specified variables does not exist (or is read-only). snmp_error will return a text string containing some error information about the most recent snmp_get|next|set call, if it had an error. OTHER NOTES: I didn't find all the places where the CMU library writes to stderr or calls exit() directly. The changes I made to mib.c involve the formatting of variable values for return to the caller. I took out the descriptive prefix so the string contains only the value. Enumerated types are returned as a string containing the symbolic representation followed in parentheses by the numeric. DISTRIBUTION and OWNERSHIP perl and the CMU SNMP package have their own statements. Read them. The work I've done is free and clear. Just don't say you wrote it if you didn't, and don't say I wrote it if you change it. Guy Streeter streeter@ingr.com April 1, 1992 (not a joke!) 1.16) There's an a2p and an s2p; why isn't there a p2c (perl-to-C)? Because the Pascal people would be upset that we stole their name. :-) The dynamic nature of Perl's do and eval operators (and remember that constructs like s/$mac_donald/$mac_gregor/eieio count as an eval) would make this very difficult. To fully support them, you would have to put the whole Perl interpreter into each compiled version for those scripts using them. This is what undump does right now, if your machine has it. If what you're doing will be faster in C than in Perl, maybe it should have been written in C in the first place. For things that ought to be written in Perl, the interpreter will be just about as fast, because the pattern matching routines won't work any faster linked into a C program. Even in the case of simple Perl programs that don't do any fancy evals, the major gain would be in compiling the control flow tests, with the rest still being a maze of twisty, turny subroutine calls. Since these are not usually the major bottleneck in the program, there's not as much to be gained via compilation as one might think. 1.17) Where can I get undump for my machine? The undump program comes from the TeX distribution. If you have TeX, then you may have a working undump. If you don't, and you can't get one, *AND* you have a GNU emacs working on your machine that can clone itself, then you might try taking its unexec() function and compiling Perl with -DUNEXEC, which will make Perl call unexec() instead of abort(). You'll have to add unexec.o to the objects line in the Makefile. If you succeed, post to comp.lang.perl about your experience so others can benefit from it. 1.18) Where can I get a perl-mode for emacs? In the perl4.0 source directory, you'll find a directory called "emacs", which contains several files that should help you. 1.19) How can I use Perl interactively? The easiest way to do this is to run Perl under its debugger. If you have no program to debug, you can invoke the debugger on an `empty' program like this: perl -de 0 (The more positive amongst us prefer "perl -de 1". :-) Now you can type in any legal Perl code, and it will be immediately evaluated. You can also examine the symbol table, get stack backtraces, check variable Values, and if you want to, set breakpoints and do the other things you can do in a symbolic debugger. 1.20) Is there a Perl shell? Not really. Perl is a programming language, not a command interpreter. There is a very simple one called "perlsh" included in the Perl source distribution. It just does this: $/ = ''; # set paragraph mode $SHlinesep = "\n"; while ($SHcmd = <>) { $/ = $SHlinesep; eval $SHcmd; print $@ || "\n"; $SHlinesep = $/; $/ = ''; } Not very interesting, eh? Daniel Smith is working on an interactive Perl shell called SoftList. It's currently at version 3.0beta. SoftList 3.0 has tcsh-like command line editing, can let you define a file of aliases so that you can run chunks of perl or UNIX commands, and so on. You can send mail to him for further information and availability. 1.21) Is there a Perl profiler? While there isn't one included with the perl source distribution, various folks have written packages that allow you to do at least some sort of profiling. The strategy usually includes modifying the perl debugger to handle profiling. Authors of these packages include Wayne Thompson Ray Lischner Kresten Krab Thorup The original articles by these folks containing their profilers are available on convex.com in /pub/perl/information/profiling.shar via anon ftp. 1.22) Is there a yacc for Perl? Yes!! It's a version of Berkeley yacc that outputs Perl code instead of C code! You can get this from ftp.sterling.com [192.124.9.1] in /local/perl-byacc1.8.1.tar.Z, or send the author mail for details. 1.23) How can I use curses with perl? One way is to build a curseperl binary by linking in your C curses library as described in the usub subdirectory of the perl sources. This requires a modicum of work, but it will be reasonably fast since it's all in C (assuming you consider curses reasonably fast. :-) Programs written using this method require the modified curseperl, not vanilla perl, to run. While this is something of a disadvantage, experience indicates that it's better to use curseperl than to try to roll your own using termcap directly. Another possibility is to use Henk Penning's cterm package, a curses emulation library written in perl. cterm is actually a separate program with which you communicate via a pipe. It is available from ftp.cs.ruu.nl [131.211.80.17] via anonymous ftp. in the directory pub/PERL. You may also acquire the package via email in compressed, uuencoded form by sending a message to mail-server@cs.ruu.nl containing these lines: begin send PERL/cterm.shar.Z end See the question on retrieving perl via mail for more information on how to get retrieve other items of interest from the mail server there. 1.24) How can I use X with Perl? Right now, you have several choices. You can wait for perl5, use the WAFE or STDWIN packages, or try to make your own usub bindings. Perl5 is anticipated to be released with bindings for X, called guiperl. An exciting prototype for this, written by Jon Biggar , Larry's *other* brother-in-law and officemate, is already up and running inside of Netlabs. This program addresses the same dynamic gui-building problem space as does tcl/tk. If you can't wait or don't think that guiperl will do what you want, a stab at Motif bindings was begun by Theodore C. Law area. His article about this is on convex.com in /pub/perl/info/motif for anon ftp. STDWIN is a library written by Guido van Rossum (author of the Python programming language) that is portable between Mac, Dos and X11. One could write a Perl agent to speak to this STDWIN server. WAFE is a package that implements a symbolic interface to the Athena widgets (X11R5). A typical Wafe application consists in our framework of two parts: the front-end (we call it Wafe for Widget[Athena]front end) and an application program running typically as separate process. The application program can be implemented in an arbitrary programming language and talks to the front-end via stdio. Since Wafe (the front-end) was developed using the extensible TCL shell (cite John Ousterhout), an application program can dynamically submit requests to the front-end to build up the graphical user interface; the application can even down-load application specific procedures into the front-end. The distribution contains sample application programs in Perl, GAWK, Prolog, TCL, and C talking to the same Wafe binary. Many of the demo applications are implemented in Perl. Wafe 0.9 can be obtained via anonymous ftp from ftp.wu-wien.ac.at:pub/src/X11/wafe-0.9.tar.Z (for people without name server: the ip address is 137.208.3.5) 1.25) What is perl4? What is perl5? The answer to what is perl4 is nearly anything you might otherwise program in shell or C. The answer to what is perl5 is basically Perl: the Next Generation. In fact, it's essentially a complete rewrite of perl from the bottom up, and back again. Larry gave a talk on perl5 at a Bay LISA meeting as well as at the most recent USENIX LISA conference in Long Beach in which he timorously admitted that perl5 might possibly be beta released in early 1993. Well, it's now August 1, and we do have an alpha version. See below. He enumerated some of the following features. Note that not only have not all these been implemented yet, the ones further down the list might well not get done at all. a faster, tighter, more flexible interpreter very easy GUI Perl applications using X bindings ("guiperl") embeddable Perl code in C code: cc prog.c -lperl multiple coresident perl interpreters: perhaps threading and/or coroutines named argument passing: some_func( OC => $red, TOF => "\f"); recursive lists: [a, b, [c, d], e] has 4 elts, the 3rd being itself a list typed pointers and generalized indirection: like @{$aptr} or &{$fptr} or &{ $table[$index] . "func" }(). merging of list operator and function calling syntax: split /pat/, $string; subroutines without &'s: myfunc($arg); generalization of dbm binding for assoc arrays to handle any generic fetch/store/open/close/flush package. (thus allowing both dbm and gdbm at once) object oriented programming: STDOUT->flush(1); give dog $bone; lexical scoping